const fs = require('fs');
const stat = fs.stat;
const path = require('path');
const argv = process.argv;
const Console = console;
const moduleName = argv[2];
//Console.log(pages);
if (argv.length <= 2) {
  Console.error('请输入要创建的模块名称');
  return;
} else if (!(/^[\w-_]+$/).test(moduleName)) {
  Console.error('模块名称不合法');
  return;
}
var copy = function (src, dst) {
  // 读取目录中的所有文件/目录
  fs.readdir(src, function (err, paths) {
    if (err) {
      throw err;
    }
    paths.forEach(function (path) {
      var _src = src + '/' + path,
        _dst = dst + '/' + path,
        readable, writable;
      stat(_src, function (err, st) {
        if (err) {
          throw err;
        }
        // 判断是否为文件
        if (st.isFile()) {
          if (path == 'main.ts') {
            var mainData = fs.readFileSync(_src, 'utf-8');
            mainData = mainData.replace(/DEMO_MODULE/g,moduleName);
            fs.writeFileSync(_dst, mainData)
          } else {
            // 创建读取流
            readable = fs.createReadStream(_src);
            // 创建写入流
            writable = fs.createWriteStream(_dst);
            // 通过管道来传输流
            readable.pipe(writable);
          }
        }
        // 如果是目录则递归调用自身
        else if (st.isDirectory()) {
          exists(_src, _dst, copy);
        }
      });
    });
  });
};
// 在复制目录前需要判断该目录是否存在，不存在需要先创建目录
var exists = function (src, dst, callback) {
  fs.exists(dst, function (exists) {
    // 已存在
    if (exists) {
      callback(src, dst);
    }
    // 不存在
    else {
      fs.mkdir(dst, function () {
        callback(src, dst);
      });
    }
  });
};

fs.exists(path.join(__dirname, '../src/modules/', moduleName), function (isExists) {
  if (isExists) {
    Console.error('此模块已存在不允许再次创建');
    return;
  }
  // 复制目录
  exists('./moduleTemplate', './src/modules/' + moduleName, copy);
});